import axios from "axios";
import router from "@/router";
import { ElMessage } from "element-plus";

//创建axios实例对象
const request = axios.create({
  baseURL: "/api",
  timeout: 5000,
});

//axios的请求 request 拦截器 - 获取localStorage中的token, 在请求头中添加token请求头
request.interceptors.request.use(
  (config) => { //成功回调
    if (config.url !== '/login') {
      const loginUser = JSON.parse(localStorage.getItem("loginUser"));
      // 判断token是否存在
      if (loginUser && loginUser.token) {
        // 在请求头中添加token请求头
        config.headers.token = loginUser.token;
      } else {
        //跳转到登录页面
        ElMessage.error('登录超时, 请重新登录');
        router.push('/login');
      }
    }
    return config;
  },
  (error) => {  //失败回调
    return Promise.reject(error);
  }
)

//axios的响应 response 拦截器
request.interceptors.response.use(
  (response) => { //成功回调
    return response.data;
  },
  (error) => {  //失败回调
    // 检查是否是token失效的情况，根据后端返回的特定错误信息"Invalid access token"
    if (error.response &&
      error.response.data &&
      error.response.data.code === 0 &&
      (error.response.data.msg === "Invalid access token" || error.response.data.msg === "The access token has expired")) {
      //提示信息
      ElMessage.error('登录超时, 请重新登录');
      //删除token
      localStorage.removeItem('loginUser');
      //断开websocket连接
      
      //跳转到登录页面
      router.push('/login');
    }
    return Promise.reject(error);
  }
);


export default request;